package com.ruoyi.fun.service;

import java.util.List;
import java.util.Map;

/**
 * 库存管理Service接口
 * 
 * @author ruoyi
 * @date 2025-01-15
 */
public interface IEcStockService 
{
    /**
     * 检查商品SKU库存是否充足
     * 
     * @param skuId SKU ID
     * @param quantity 需要的数量
     * @return 是否有足够库存
     */
    boolean checkStock(Long skuId, Long quantity);
    
    /**
     * 批量检查商品SKU库存
     * 
     * @param stockCheckList 库存检查列表，包含skuId和quantity
     * @return 检查结果，key为skuId，value为是否有足够库存
     */
    Map<Long, Boolean> batchCheckStock(List<Map<String, Object>> stockCheckList);
    
    /**
     * 扣减商品SKU库存
     * 
     * @param skuId SKU ID
     * @param quantity 扣减数量
     * @param orderNo 订单号（用于记录库存变动日志）
     * @return 扣减是否成功
     */
    boolean deductStock(Long skuId, Long quantity, String orderNo);
    
    /**
     * 批量扣减商品SKU库存
     * 
     * @param stockDeductList 库存扣减列表，包含skuId和quantity
     * @param orderNo 订单号（用于记录库存变动日志）
     * @return 扣减是否成功
     */
    boolean batchDeductStock(List<Map<String, Object>> stockDeductList, String orderNo);
    
    /**
     * 恢复商品SKU库存（用于订单取消等场景）
     * 
     * @param skuId SKU ID
     * @param quantity 恢复数量
     * @param orderNo 订单号（用于记录库存变动日志）
     * @return 恢复是否成功
     */
    boolean restoreStock(Long skuId, Long quantity, String orderNo);
    
    /**
     * 获取商品SKU当前库存数量
     * 
     * @param skuId SKU ID
     * @return 当前库存数量
     */
    Long getCurrentStock(Long skuId);
}